package com.yixia.system.service.system;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yixia.system.domain.system.SysUserRole;
import com.yixia.common.core.domain.AjaxResult;
import com.yixia.common.core.domain.entity.SysRole;
import com.yixia.common.utils.page.PageBean;

import java.util.List;
import java.util.Set;

/**
* @author 35038
* @description 针对表【sys_role】的数据库操作Service
* @createDate 2023-06-02 19:15:05
*/
public interface SysRoleService extends IService<SysRole> {

    //根据角色id来获取用户权限
    public Set<String> selectRolePermissionByUserId(Long id);

    /*分页查询根据role和页面*/
    public AjaxResult slectRolePageList(PageBean pageBean, SysRole role);

    /**
     * 根据角色名看该角色名是否存在
     * @param role
     * @return
     */
    boolean checkRoleNameUnique(SysRole role);

    /**
     * 根据角色权限字段看是否存在
     * @param role
     * @return
     */
    boolean checkRoleKeyUnique(SysRole role);

    /**
     * 校验角色是否有数据权限
     *
     * @param roleId 角色id
     */
    public void checkRoleDataScope(Long roleId);

    /**
     * 通过ID来进行查询角色信息
     * @param roleId
     * @return
     */
    public SysRole selectRoleById(Long roleId);


    /**
     * 新增保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public boolean insertRole(SysRole role);

    /**
     * 校验角色是否允许操作
     *
     * @param role 角色信息
     */
    public void checkRoleAllowed(SysRole role);

    /**
     * 修改角色信息
     * @param role
     * @return
     */
    public boolean updateRole(SysRole role);

    /**
     * 修改角色状态
     * @param role
     */
    public boolean updateRoleStatus(SysRole role);


    /**
     * 批量删除角色信息
     * @param roleIds
     * @return
     */
    public int deleteRoleByIds(Long[] roleIds);


    /**
     * 将一个角色分配给多个用户
     * @param roleId 角色ID
     * @param userIds 多个用户ID
     * @return 分发情况
     */
    public boolean insertAuthUsers(Long roleId, Long[] userIds);

    /**
     * 批量取消授权用户
     * @param roleId 要取消的角色ID
     * @param userIds 需要取消的用户信息
     * @return 返回状态
     */
    boolean deleteAuthUsers(Long roleId, Long[] userIds);

    /**
     * 取消授权用户
     * @param userRole 用户ID，角色ID
     * @return 返回状态
     */
    boolean deleteAuthUser(SysUserRole userRole);

    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SysRole> selectRolesByUserId(Long userId);

    /**
     * 获取全部用户并使用授权值
     * @param userId
     * @return
     */
    List<SysRole> selectAllRolesOnAuthRoleByUserId(Long userId);

    /**
     * 获取所有角色信息
     */
    List<SysRole> selectRoleAll();

    /**
     * 修改数据权限信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int authDataScope(SysRole role);
}
